"""# 异常
# 应用场景：
# 预防代码执行过程中出现错误时中断，可以通过捕获异常的方式自定义出现异常之后执行的操作
# 在代码调试中，想知道具体的异常信息，可以通过异常捕获去实现
# 异常概念
# 代码程序运行出现的错误，就是异常，提示错误信息的过程叫抛出异常（raise）
# 处理出现的异常叫捕获异常 ---> 让代码能自动执行下去

语法格式：
try:
# 尝试执行的代码
except 异常类型:
# 出现异常时执行的代码


#捕获特点异常
try:
    num = int(input("请输入数字："))
    print(num)
except:
    print("请输入正确的数字")



# 要求:需要指定特定的异常类型
# 输入一个数字，处理8除以该数字的计算
# 要求:当除数为0时捕获 ZeroDivisionError 的异常,并输出:除数不能为0
try: # 尝试执行的代码
    num = int(input("请输入一个整数："))
    result = 8 / num
    print(result)
except ZeroDivisionError: # 捕获特定异常后执行的代码
    print("除数不能为0")


# 捕获未知异常
# 语法格式
# try:
# 尝试执行的代码
# except Exception as e: # 这个e可以随便定义，e理解为error
# 出现异常时执行的代码

#案例
try: # 尝试执行的代码
    num = int(input("请输入一个整数："))
    result = 8 / num
    print(result)
except Exception as e: # 捕获所有异常后执行的代码
    print(f"捕获的异常类型有：{e}")


# 捕获异常完整版
# 常见应用场景：UI自动化后置操作中，有个关闭浏览器的操作可以使用finally
try:
# 尝试执行的代码
    pass
except 错误类型1:
    # 针对错误类型1， 对应的代码处理
    pass
except 错误类型2:
    # 针对错误类型2， 对应的代码处理
    pass
except Exception as e:
    # 打印错误信息
    print(e)
else:
    # 没有异常才会执行的代码
    pass
finally:
    # 无论是否有异常， 都会执行的代码
    pass

# 注意事项
# except 后面每次只能跟一种类型错误
# 上述语法关键词必须对齐
# 上述关键词后面都需要加冒号
"""

"""
需求：
1. 提示用户输入一个整数
2. 使用 8 除以用户输入的整数并且输出
3. 如果不是整数, 提示：输入错误,请输入数字
4. 如果是整数，但是除数为0，提示：不能被0整除
5. 如果是满足条件的整数, 则进一步判断是奇数还是偶数
6. 最终提示: 程序运行结束
"""
try: # 尝试执行的代码
    num = int(input("请输入数字："))
# result = 8 / num
except ValueError: # 已知错误类型
    print("输入的是非数字")
except Exception as e: # 未知错误类型
    print(f"其他类型错误：{e}")
else: # 上述都不满足情况
    if num % 2 == 0:
        print("偶数")
    else:
        print("奇数")
finally: # 不管上述满足/不满足都需要执行
    print("程序运行结束")

#主动抛出异常
# 应用场景：Python
# 提供异常类Exception，可以根据业务需要主动抛出异常【开发用】
# 使用说明：
# 创建Exception异常类对象
# 通过raise
# 抛出异常类对象
# 语法格式
# 案例演示
# # 创建异常类对象
# 异常类对象 = Exception(异常描述信息)
# 抛出异常对象
# raise 异常类对象
"""
需求：
1. 定义 input_password 函数， 提示用户输入密码
2. 如果用户输入长度 < 8， 抛出异常
3. 如果用户输入长度 >=8， 返回输入的密码
"""


def input_password():
    """输入函数"""
    pwd = input("请输入密码：")
# 判断
    if len(pwd) < 8:
# 抛出异常：程序主动抛出的
        ex = Exception("输入密码长度不足8位")  # 实例化异常类对象
        raise ex  # 主动抛出异常
    else:
        return pwd

if __name__ == '__main__':
# 捕获异常
    try:
        print(input_password())
    except Exception as e:
        print(e)
# 结论：
# 当密码长度不足8位时抛出代码中的异常信息：Exception: 密码长度不足8位
